package org.ysu.shoeShopping.service.impl;

import org.springframework.stereotype.Service;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import org.ysu.shoeShopping.dao.ShoesDao;
import org.ysu.shoeShopping.entity.Shoes;
import org.ysu.shoeShopping.service.ShoesService;

import javax.annotation.Resource;
import java.util.List;

/**
 * 鞋子商品业务服务实现类
 * 实现鞋子商品相关的具体业务逻辑，包括：
 * - 商品数据的增删改查操作
 * - 商品状态管理（启用/禁用）
 * - 商品分页查询和数据统计
 *
 * @author makejava
 * @since 2025-09-13 16:59:39
 */
@Service("shoesService")
public class ShoesServiceImpl implements ShoesService
{
    @Resource
    private ShoesDao shoesDao;

    /**
     * 通过ID查询单条数据
     *
     * @param sid 主键
     * @return 实例对象
     */
    @Override
    public Shoes queryById(Integer sid) {
        return this.shoesDao.queryById(sid);
    }

    /**
     * 分页查询
     *
     * @param shoes 筛选条件
     * @param pageRequest      分页对象
     * @return 查询结果
     */
    @Override
    public Page<Shoes> queryByPage(Shoes shoes, PageRequest pageRequest) {
        long total = this.shoesDao.count(shoes);
        return new PageImpl<>(this.shoesDao.queryAllByLimit(shoes, pageRequest), pageRequest, total);
    }

    /**
     * 新增数据
     *
     * @param shoes 实例对象
     * @return 实例对象
     */
    @Override
    public Shoes insert(Shoes shoes) {
        this.shoesDao.insert(shoes);
        return shoes;
    }

    /**
     * 修改数据
     *
     * @param shoes 实例对象
     * @return 实例对象
     */
    @Override
    public Shoes update(Shoes shoes) {
        this.shoesDao.update(shoes);
        return this.queryById(shoes.getSid());
    }

    /**
     * 通过主键删除数据
     *
     * @param sid 主键
     * @return 是否成功
     */
    @Override
    public boolean deleteById(Integer sid) {
        return this.shoesDao.deleteById(sid) > 0;
    }

    /**
     * 获取热门商品（按销量排序）
     *
     * @param limit 限制数量
     * @return 热门商品列表
     */
    @Override
    public List<Shoes> getTopSellingShoes(int limit) {
        return this.shoesDao.getTopSellingShoes(limit);
    }

    /**
     * 获取最新商品（按发布时间排序）
     *
     * @param limit 限制数量
     * @return 最新商品列表
     */
    @Override
    public List<Shoes> getLatestShoes(int limit) {
        return this.shoesDao.getLatestShoes(limit);
    }

    /**
     * 商品搜索
     * 支持按名称、性别、类型、品牌、价格等条件搜索商品
     *
     * @param keyword 搜索关键词（可选）
     * @param gender 性别筛选（可选）
     * @param typeId 商品类型ID（可选）
     * @param brandId 品牌ID（可选）
     * @param minPrice 最低价格（可选）
     * @param maxPrice 最高价格（可选）
     * @param page 页码
     * @param size 每页大小
     * @return 搜索结果列表
     */
    @Override
    public List<Shoes> searchShoes(String keyword, String gender, Integer typeId, Integer brandId,
                                  Float minPrice, Float maxPrice, int page, int size) {
        int offset = (page - 1) * size;
        return this.shoesDao.searchShoes(keyword, gender, typeId, brandId, minPrice, maxPrice, offset, size);
    }

    @Override
    public List<Shoes> getAllShoes()
    {
        return this.shoesDao.getAllShoes();
    }

    @Override
    public Shoes findBySnum(String snum)
    {
        return this.shoesDao.findBySnum(snum);
    }
}
